<?php
import('classes.issue.issueDAO');







function connBD() {
    $conn = mysql_connect("localhost", "ojs", "ojs", true);
    if (!$conn) {
        die('Imposible conectar a BD: ' . mysql_error());
    }
    $bd = mysql_select_db("ojs", $conn);
    if (!$bd) {
        mysql_close($conn);
        die("Error en BD: " . mysql_error());
    }

    return $conn;
}

/*
Metodo que devuelve la lista de numeros publicados
*/
function numerosPublicados(){
	//Se crea un objeto de tipo JournalDAO
	$journalDAO = new JournalDAO();
	DAORegistry::registerDAO('JournalDAO', $journalDAO);
	$journalDAO =& DAORegistry::getDAO('JournalDAO');

	/* 
	Se consultan todas las revistas activadas
	*/
	$revistasActivasDAORF = $journalDAO->getEnabledJournals();

	/*
	Como la consulta anterior retorna un array de tipo DAOResultFactory, este objeto tiene un meotod para pasarlos a array de tipo Journal
	*/
	$revista = $revistasActivasDAORF->toArray();

	$idJournal = 0;
	/*
	Una vez que tenemos un array de tipo Journal, lo que hacemos es consultar la id del primer elemento (ya que no habrá más revistas, si las hubiese habría que cambiar esto)
	*/
	$idJournal = (int) $revista[0]->getJournalId();


    
    //Se crea un objeto de tipo IssueDAO
	$issueDAO = new IssueDAO();
	DAORegistry::registerDAO('IssueDAO', $issueDAO);
	$issueDAO =& DAORegistry::getDAO('IssueDAO');

	/* 
	Se consultan todos los numeros publicados
	*/
	$numerosPublicados = $issueDAO->getPublishedIssues($idJournal);

	/*
	Como la consulta anterior retorna un array de tipo DAOResultFactory, este objeto tiene un meotod para pasarlos a array de tipo Issue
	*/
	$numerosPublicados = $numerosPublicados->toArray();

	

	return $numerosPublicados;
}
/*
Metodo que devuelve la lista de numeros se pueden empezar a destacar
*/
function can_start_destacar(){
	connBD();

	$numerosPublicados = numerosPublicados();

	
	


	$numerosEnDestaque = destacadosEnProceso();
	$id_1 = array();
	$arrlength1=count($numerosEnDestaque);
	for($x=0;$x<$arrlength1;$x++) {
		$id_1 = $numerosEnDestaque[$x]->getId();
	}

	


	$numerosEnVotacion = enVotacion();
	$id_2 = array();
	$arrlength2=count($numerosEnVotacion);
	for($x=0;$x<$arrlength2;$x++) {
		$id_2 = $numerosEnVotacion[$x]->getId();
	}





	$numerosFin = finalizados();
	$id_3 = array();
	$arrlength3=count($numerosFin);
	for($x=0;$x<$arrlength3;$x++) {
		$id_3 = $numerosFin[$x]->getId();
	}




    $arrlength4=count($numerosPublicados);

    $numeros_abiertos = array();
    $cont=0;

    //Se crea una lista con los numeros abiertos, es decir que la id del numero publicado esta en la lista de id_destacados
   


    for($x=0;$x<$arrlength4;$x++) {
  			$id_numero = $numerosPublicados[$x]->getId();
  			$enc = "false";
  			$y=0;
  			while(($y<$arrlength1) && ($enc=="false")) {
	  				if($id_1[$y]==$id_numero){
	  					$enc = "true";
	  				}
	  				else{
	  					$y++;

	  				}

			}
			$y=0;
			while(($y<$arrlength2) && ($enc=="false")) {
	  				if($id_2[$y]==$id_numero){
	  					$enc = "true";
	  				}
	  				else{
	  					$y++;
	  				}

			}
			$y=0;
			while(($y<$arrlength3) && ($enc=="false")) {
	  				if($id_3[$y]==$id_numero){
	  					$enc = "true";
	  				}
	  				else{
	  					$y++;
	  				}

			}
			if($enc=="false"){
				$numeros_abiertos[$cont]=$numerosPublicados[$x];
				$cont++;
			}
	}

	return $numeros_abiertos;

}
	

/*
Metodo que activa el proceso de destacar articulos de un numero publicado
*/
function comenzarDestacados($idNumero){

	$conn = connBD();
	$votado = "EnProcesoDestaque";
	$q = "INSERT INTO numeros_destacados (id_numero,votado) VALUES ('".$idNumero."','".$votado."')" ;
    try {
        if (mysql_query($q,$conn)) {
            mysql_close($conn);
            return true;
        }
        else {
            mysql_close($conn);
            return false;
        }
    }
    catch (Exception $e){
        echo $e->getMessage();
        $err[]=$e->getMessage();
        mysql_close($conn);
        return false;
    }


}

/*
Metodo que finaliza el proceso de destacar articulos de un numero publicado y ya se puede empezar a votar
*/
function finalizarDestacados($idNumero){

	$conn = connBD();
	$votado = "Votaciones";
	$q = "UPDATE numeros_destacados SET votado='".$votado."' WHERE id_numero='" . $idNumero . "'";
    try {
        if (mysql_query($q,$conn)) {
            mysql_close($conn);
            return true;
        }
        else {
            mysql_close($conn);
            return false;
        }
    }
    catch (Exception $e){
        echo $e->getMessage();
        $err[]=$e->getMessage();
        mysql_close($conn);
        return false;
    }


}

/*
Metodo que finaliza el proceso de destacar articulos de un numero publicado y ya se puede empezar a votar
*/
function finalizarVotacion($idNumero){

	$conn = connBD();
	$votado = "Fin";
	$q = "UPDATE numeros_destacados SET votado='".$votado."' WHERE id_numero='" . $idNumero . "'";
    try {
        if (mysql_query($q,$conn)) {
            mysql_close($conn);
            return true;
        }
        else {
            mysql_close($conn);
            return false;
        }
    }
    catch (Exception $e){
        echo $e->getMessage();
        $err[]=$e->getMessage();
        mysql_close($conn);
        return false;
    }


}



/*
Metodo que devuelve la lista de numeros cuyo proceso de destacar esta abierto
*/
function destacadosEnProceso(){
	$numerosPublicados = numerosPublicados();
	$conn = connBD();
	$estado = "EnProcesoDestaque";
    $q = mysql_query("
			SELECT `id_numero` FROM `numeros_destacados` where `votado` = '" . $estado . "' ", $conn);
    if (!$q) {
        die("Error al leer datos: " . mysql_error());
    }

    $id_destacados = array();
    $i = 0;
    while ($row = mysql_fetch_array($q)) {

        $id_destacados[$i]= $row['id_numero'];

        $i++;
    }
    mysql_close($conn);
    $arrlength=count($id_destacados);
    $arrlength2=count($numerosPublicados);

    $numeros_abiertos = array();
    $cont=0;

    //Se crea una lista con los numeros abiertos, es decir que la id del numero publicado esta en la lista de id_destacados
    
    for($x=0;$x<$arrlength;$x++) {
  		for($y=0;$y<$arrlength2;$y++) {
  			$id_numero = $numerosPublicados[$y]->getId();
  			
  			if (in_array($id_numero, $id_destacados)) {

    			$numeros_abiertos[$cont]=$numerosPublicados[$y];
    			$cont++;
			}
  		}

	}
	
	return $numeros_abiertos;
}

/*
Metodo que devuelve la lista de numeros cuyo proceso de votacion esta abierto
*/
function enVotacion(){
	$numerosPublicados = numerosPublicados();
	$conn = connBD();
	$estado = "Votaciones";
    $q = mysql_query("
			SELECT `id_numero` FROM `numeros_destacados` where `votado` = '" . $estado . "' ", $conn);
    if (!$q) {
        die("Error al leer datos: " . mysql_error());
    }

    $id_destacados = array();
    $i = 0;
    while ($row = mysql_fetch_array($q)) {
        $id_destacados[$i]= $row['id_numero'];
        $i++;
    }
    mysql_close($conn);
    $arrlength=count($id_destacados);
    $arrlength2=count($numerosPublicados);

    $numeros_abiertos = array();
    $cont=0;

    //Se crea una lista con los numeros abiertos, es decir que la id del numero publicado esta en la lista de id_destacados
    
    for($x=0;$x<$arrlength;$x++) {
  		for($y=0;$y<$arrlength2;$y++) {
  			$id_numero = $numerosPublicados[$y]->getId();
  			if (in_array($id_numero, $id_destacados)) {
    			$numeros_abiertos[$cont]=$numerosPublicados[$y];
    			$cont++;
			}
  		}

	}
	return $numeros_abiertos;
}

/*
Metodo que devuelve la lista de numeros cuyo proceso de votacion esta abierto
*/
function finalizados(){
	$numerosPublicados = numerosPublicados();
	$conn = connBD();
	$estado = "Fin";
    $q = mysql_query("
			SELECT `id_numero` FROM `numeros_destacados` where `votado` = '" . $estado . "' ", $conn);
    if (!$q) {
        die("Error al leer datos: " . mysql_error());
    }

    $id_destacados = array();
    $i = 0;
    while ($row = mysql_fetch_array($q)) {
        $id_destacados[$i]= $row['id_numero'];
        $i++;
    }
    mysql_close($conn);
    $arrlength=count($id_destacados);
    $arrlength2=count($numerosPublicados);

    $numeros_abiertos = array();
    $cont=0;

    //Se crea una lista con los numeros abiertos, es decir que la id del numero publicado esta en la lista de id_destacados
    
    for($x=0;$x<$arrlength;$x++) {
  		for($y=0;$y<$arrlength2;$y++) {
  			$id_numero = $numerosPublicados[$y]->getId();
  			if (in_array($id_numero, $id_destacados)) {
    			$numeros_abiertos[$cont]=$numerosPublicados[$y];
    			$cont++;
			}
  		}

	}
	return $numeros_abiertos;
}


/*
Metodo para destacar un articulo de un numero con el proceso de destacar abierto.
Mediante la funcion "function &getPublishedArticles($issueId) de PublishedArticleDAO" se obtienen los articulos publicados de un numero
*/
function destacarArticulo($id_issue,$id_published_article){
	connBD();
	$votacion = 0;
	$q = "INSERT INTO votaciones (id_votaciones,id_numero,id_articulo,valoracion) VALUES ('','".$id_issue."','".$id_published_article."','".$votacion."')";
    try {
        if (mysql_query($q,$conn)) {
            mysql_close($conn);
            return true;
        }
        else {
            mysql_close($conn);
            return false;
        }
    }
    catch (Exception $e){
        echo $e->getMessage();
        $err[]=$e->getMessage();
        mysql_close($conn);
        return false;
    }

	
}

/*
Metodo para realizar una votacion
* @param $lista_articulos articulos que ha votado
* @param $lista_votos votos asociados al articulo
*/
function votacion($lista_articulos,$lista_votos){
	$arrlength=count($lista_articulo);
	for($x=0;$x<$arrlength;$x++) {
  			connBD();
		$votado = "Votaciones";
		$q = "UPDATE votaciones SET valoracion='".$lista_votos[$x]."' WHERE id_articulo='" . $lista_articulos[$x][0] . "'";
	    try {
	        if (mysql_query($q,$conn)) {
	            mysql_close($conn);
	            return true;
	        }
	        else {
	            mysql_close($conn);
	            return false;
	        }
	    }
	    catch (Exception $e){
	        echo $e->getMessage();
	        $err[]=$e->getMessage();
	        mysql_close($conn);
	        return false;
	    
	  		}

		}

	
}

/*
Metodo que devuelve la lista de numeros publicados
*/
function articulos_a_destacar($sectionId,$issueId){
	//Se crea un objeto de tipo JournalDAO
	$publishedArticleDAOp = new PublishedArticleDAO();
	DAORegistry::registerDAO('PublishedArticleDAO', $publishedArticleDAOp);
	$publishedArticleDAOp =& DAORegistry::getDAO('PublishedArticleDAO');

	/* 
	Se consultan todas las revistas activadas
	*/
	$articulos = $publishedArticleDAOp->getPublishedArticlesBySectionId($sectionId, $issueId);


	


	

	

	return $articulos;
}


	

?>